package com.lv.fast.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lv.fast.DTO.SysUserDTO;
import com.lv.fast.DTO.SysUserPageQuery;
import com.lv.fast.VO.SysUserVO;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Description
 * @Author jie.lv
 */
public interface SysUserService {

    /**
     * 根据唯一关键字获取后台用户
     * @param key 唯一关键字
     * @return 后台用户对象
     */
    SysUserDTO getSysUserByUniqueKey(String key);

    /**
     * 根据后台用户Id获取后台用户
     * @param userId 后台用户Id
     * @param isContainsRoles 是否包含角色信息
     * @return 后台用户对象
     */
    SysUserDTO getSysUserById(String userId, boolean isContainsRoles);

    /**
     * 给后台用户对象追加角色信息
     * @param userDTO 后台用户
     * @param isContainsMenus 是否包含菜单信息
     * @return 追加角色信息后的用户对象
     */
    SysUserDTO appendRoles(SysUserDTO userDTO, boolean isContainsMenus);

    /**
     * 分页查询用户列表
     * @param pageQuery 分页信息
     * @return 带分页信息的用户列表
     */
    IPage<SysUserVO> list(SysUserPageQuery pageQuery);

    /**
     * 新增用户
     * @param sysUserDTO 用户对象
     * @return 是否成功
     */
    boolean add(SysUserDTO sysUserDTO);

    /**
     * 修改用户信息
     * @param sysUserDTO 用户对象
     * @return 是否成功
     */
    @Transactional(rollbackFor = Throwable.class)
    boolean update(SysUserDTO sysUserDTO);

    /**
     * 删除用户
     * @param userId 用户Id
     * @return 是否成功
     */
    @Transactional(rollbackFor = Throwable.class)
    boolean delete(String userId);
}
